#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time   : 2021/7/2 0:39
# @Author : cjw
from typing import List, Tuple, Iterable


def handle_text(text: str, mode: str = 't', is_new: bool = True) -> str:
	"""
	android uiautomator文本定位拼接
	文本定位类型，mode的值：
	t: 文本
	tc：文本包含
	tm：文本正则
	ts：文本起始匹配
	:param text: 定位文本
	:param mode: 文本定位类型，默认是t，文本查找
	:param is_new: 是否返回带new UiSeclector(),默认是返回
	:return:
	"""
	ui_selector = 'new UiSelector()'
	mode = mode.lower()
	if mode == 't':
		selector_text = f'text("{text}")'
	elif mode == 'tc':
		selector_text = f'textContains("{text}")'
	elif mode == 'tm':
		selector_text = f'textMatches("{text}")'
	elif mode == 'ts':
		selector_text = f'textStartsWith("{text}")'
	else:
		raise ValueError(f'android uiautomator 文本定位类型不存在：{mode}，'
		                 f'可选类型：t(文本)，tc(文本包含)，tm(文本正则)，ts(文本起始匹配)')

	# 是否返回带new UiSelector()的字符拼接
	if is_new:
		ui_selector = f'{ui_selector}.{selector_text}'
	else:
		ui_selector = selector_text
	return ui_selector


def handle_texts(first_text: List[str], second_text: List[str], mode: str = 'zh') -> str:
	"""
	文本组合定位
	组合定位类型，mode的值：
	zh：组合定位
	cs：父子定位
	fp：兄弟定位
	:param first_text: 组合第一个定位文本和方式(文本内容，定位方式)
	:param second_text: 组合第二个定位文本和方式
	:param mode: 组合定位模式，默认是zh
	:return:
	"""
	ui_selector = 'new UiSelector()'
	mode = mode.lower()
	# 处理第一个文本定位
	if first_text[-1]:
		ui_selector = f'{ui_selector}.{handle_text(*first_text, is_new=False)}'
	else:
		ui_selector = f'{ui_selector}.{handle_text(first_text[0], "t", False)}'

	# 处理第二个文本定位
	if second_text[-1]:
		ui_second = handle_text(*second_text, is_new=False)
	else:
		ui_second = handle_text(second_text[0], 't', False)

	# 组合方式
	if mode == 'zh':  # 组合定位
		ui_selector = f'{ui_selector}.{ui_second}'
	elif mode == 'cs':  # 父子定位
		ui_selector = f'{ui_selector}.childSelector({ui_second})'
	elif mode == 'fp':  # 兄弟定位
		ui_selector = f'{ui_selector}.fromParent({ui_second})'
	else:
		raise ValueError(f'android uiautomator 组合定位类型不存在：{mode}，'
		                 f'可选值：zh(组合定位)，cs(父子定位)，fp(兄弟定位)')
	return ui_selector


def swipe_find_text(text: str, mode: str = 't') -> str:
	"""
	根据文本滑动查找元素
	:param text: 查找的值
	:param mode: 文本匹配方式
	:return:
	"""
	ui_selector = f'new UiScrollable(new UiSelector().scrollable(true).instance(0)).' \
	              f'scrollIntoView(new UiSelector().{handle_text(text, mode, False)}.instance(0))'
	return ui_selector


if __name__ == '__main__':
	from app_wework.setting import ELEMENT_YML
	from app_wework.util.file_operator import YmlOperator

	yml_el = YmlOperator(ELEMENT_YML['am']).data
	print(yml_el)
	print(*yml_el['name'][1])
	# print(handle_text('我的', is_new=False))
	# print(handle_texts(('我的', 'tm'), ('你的', 'tc'), 'zh'))
	print(handle_texts(*yml_el['name'][1]))
